iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
AI/ ML & Data

粗暴的資料處理 DuckDB系列 第 12

Day12 -- DuckDB Style SQL (6) ?

  • 分享至 

  • xImage
  •  

今天我們從一個有趣的 SQL 問題開始,介紹我一個很愛的 DuckDB SQL 特性 Lateral Column Alias

這段 SQL 語句有什麼問題?

SELECT 42 AS a, a + 1 AS b

在 Postgres 中,你會遇到一個錯誤,column ‘a’ does not exist
要解決這個問題(Postgres),需要使用 Common Table Expressions (CTEs) 或子查詢。

我曾經疑惑,為什麼不能在同一個 SELECT 列表中重複使用你已經定義的表達式呢?

這就是 Lateral Column Alias 派上用場的時候 😄,Lateral 就是 Lateral Join 的那個意思,代表你可以重複使用 SELECT 中先出現的表達式

所以這句

SELECT 42 AS a, a + 1 AS b

在 DuckDB 可以跑出我們心中的那個結果。
不過問題來了,為什麼 Postgres 不支援這種寫法 ?

我們把上面的 query 稍微延伸一下

SELECT 42 AS a, a + 1 AS b FROM t

你猜到問題了嗎 ?

如果表 t 裡已經有一個名為 “a” 的 col 呢? 那麼「b」應該是 42 + 1,還是應該是 col “a” + 1 呢?

DuckDB 目前的規則是以 table 的 col 優先級比較高。
這是一個非常方便的功能。DuckDB、Snowflake、Databricks 和 AWS Redshift 都支持它。

趕快到 DuckDB WASM 或 Colab 試試看吧!


上一篇
Day11 -- DuckDB Style SQL (5) ?
下一篇
Day13 -- DuckDB Style SQL (7) ?
系列文
粗暴的資料處理 DuckDB13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言